package com.qq.open.qzone.photo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.qq.open.common.OpenQqConstants;
import com.qq.open.common.OpenQqUtils;
import com.qq.open.common.json.JSONArray;
import com.qq.open.common.json.JSONException;
import com.qq.open.common.json.JSONObject;
import com.qq.open.qzone.bean.param.QqListAlbumParamBean;
import com.qq.open.qzone.bean.result.QqAlbumInfoBean;
import com.qq.open.qzone.bean.result.QqListAlbumResultBean;

/**
 * 获取登录用户的相册列表
 * 
 * @author HaoLiang
 * @version 0.1.1
 */
public class QqListAlbum {

	/** QQ互联工具类 */
	private OpenQqUtils oqu = new OpenQqUtils();
	
	/** 日志 */
	private Logger log = Logger.getLogger(QqListAlbum.class);
	
	/**
	 * 获取相册列表
	 * 
	 * @param paramBean 参数
	 * @return 相册信息
	 * @throws IOException 
	 */
	public QqListAlbumResultBean getListAlbum(QqListAlbumParamBean paramBean) throws IOException {
		
		// 日志
		log.info("获取相册列表 开始...");
		
		// 获取创建相册的参数
		String listAlbumUrl = this.getListAlbumUrl(paramBean);
		
		// 获取接口返回的内容
		String jsonData = oqu.doGet(listAlbumUrl);
		
		// 相册信息
		QqListAlbumResultBean resultBean = this.getAlbumInfoList(jsonData);
		
		// 日志
		log.info("获取相册列表 开始...");
		
		return resultBean;
	}
	
	
	/**
	 * 获取相册列表的URL
	 * 
	 * @param paramBean 参数
	 * @return 获取相册列表的URL
	 */
	private String getListAlbumUrl(QqListAlbumParamBean paramBean) {
		
		// 获取用户相册列表的参数
		StringBuilder paramData = new StringBuilder();
		
		// 获取登录用户的相册列表接口地址 
		paramData.append(OpenQqConstants.QQ_LIST_ALBUM_URL);
		
		// AccessToken
		paramData.append("?access_token=" + paramBean.getAccessToken());
		
		// AppId
		paramData.append("&oauth_consumer_key=" + oqu.getConfigValue("qq.appid"));
		
		// Openid
		paramData.append("&openid=" + paramBean.getOpenId());
		
		// 定义API返回的数据格式
		paramData.append("&format=json");
		
		return paramData.toString();
	}
	
	
	/**
	 * 获取用户空间相册的详细信息
	 * 
	 * @param jsonData 接口返回的数据 
	 * @param qqu 工具类
	 * @return 相册的详细信息
	 */
	private QqListAlbumResultBean getAlbumInfoList(String jsonData) {
		
		// 获取用户相册接口的信息
		QqListAlbumResultBean albumResultBean = new QqListAlbumResultBean();
		
		// 相册详细信息
		List<QqAlbumInfoBean> albumList = null;
		
		JSONObject jsonObjRoot;
		try {
			// 加载所有的数据
			jsonObjRoot = new JSONObject(jsonData);
			
			// 接口返回错误的场合
			if (jsonObjRoot.getInt("ret") > 0) {
				
				// 设置错误标识为真
				albumResultBean.setErrorFlg(true);
				
				// 设置错误编号
				albumResultBean.setErrorCode(jsonObjRoot.get("ret").toString());
				
				// 设置错误信息
				albumResultBean.setErrorMes(jsonObjRoot.getString("msg"));
				
				return albumResultBean;
			}
			
			// 相册详细信息
			albumList = new ArrayList<QqAlbumInfoBean>();
			
			// 获取所有的相册的集合
			JSONArray albumArray = jsonObjRoot.getJSONArray("album");

			// 循环取出每个相册的信息
			for (int i = 0; i < albumArray.length(); i++) {
				// 相册信息
				QqAlbumInfoBean bean = new QqAlbumInfoBean();
				
				// 循环取出每个相册的信息
				JSONObject jsonObjTemp = new JSONObject(albumArray.get(i).toString());
				
				// 相册ID
				bean.setAlbumId(jsonObjTemp.getString("albumid"));
				
				// 相册分类ID
				bean.setClassId(jsonObjTemp.getInt("classid"));
				
				// 相册封面图像地址
				bean.setCoverUrl(jsonObjTemp.getString("coverurl"));
				
				// 相册创建时间
				bean.setCreateTime(oqu.timeStampToDate(jsonObjTemp.get("createtime").toString()));
				
				// 相册描述
				bean.setDesc(jsonObjTemp.getString("desc"));
				
				// 相册名称
				bean.setName(jsonObjTemp.getString("name"));
				
				// 照片数
				bean.setPicnum(jsonObjTemp.getInt("picnum"));
				
				// 相册权限
				bean.setPriv(jsonObjTemp.getInt("priv"));

				albumList.add(bean);
			}

		} catch (JSONException e) {
			e.printStackTrace();
			
		}
		
		// 设置所有相册的信息
		albumResultBean.setAlbumInfoList(albumList);
		
		return albumResultBean;
	}
}
